//
// Created by F1997 on 2025/4/9.
//

#ifndef NETWORK_TRAFFIC_PROCESSING_ZCE_DECODE_H
#define NETWORK_TRAFFIC_PROCESSING_ZCE_DECODE_H
#include "../utils/pch.h"

/*
 * 郑州行情解码
 *
 * */

class zce_decode {
public:

    static void parse_packet_zce(const struct pcap_pkthdr* pkthdr, const u_char* packet, MarketData& marketData, std::ofstream &outFile);
    static void parse_packet_zce2(const struct pcap_pkthdr* pkthdr, const u_char* packet, MarketData& marketData, std::ofstream &outFile);

    static U16 my_read_uint16(C8* buf);

    // 报文结构体
#pragma pack(1)

    // ------ 郑州
    // 头部固定4个字节，深度通道中，每个UDP数据包中可能包含多个报文
    struct ZCEHeader // 4B
    {
/*            uint8_t msg_type;          // 报文类型
            uint8_t msg_count;       // 消息个数
            uint16_t msg_len;          // 正文长度，大端序整数，不包含头部4字节*/

        U8 msg_type;          // 报文类型
        U8 msg_count;       // 消息个数
        U16 msg_len;          // 正文长度，大端序整数，不包含头部4字节
    };
    // 消息头
    struct MSGHeader
    {
        uint16_t length;          // 消息长度，uint16大端序整数，消息长度包含字段本身的2字节
        char body[0];       // 消息正文，原始报文
    };

    // zce-l2
    struct mdp_pkg_head // 4B
    {
        U8                    type;                         // 报文类型
        U8                    count;                        // 数据域个数
        U16                   len;                          // 报文长度（不含报文包头），网络序
        C8                    data[0];                      // 数据域指针

    };
    // 数据域内消息头
    struct mdp_msg_head // 2B
    {
        U16                   msglen;                       // 消息长度（含消息头），网络序
        C8                    data[0];                      // 消息正文指针

    };

    struct my_f_h{ // 4B
        char sign; // 1位
        char fldidx[5]; // 5位
        char value[26]; // 26位
    };

#pragma pack()

};


#endif //NETWORK_TRAFFIC_PROCESSING_ZCE_DECODE_H
